// PROGRAMA : SISSM002(SUBROUTINE)
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 14/07/94
// OBJETIVO : MONTA JANELA DE OPCOES
// ATUALIZACOES DATA
// PROGRAMA : SISSM002 24/10/1994
// BIBLIOTECA : PRODETR
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sissm002A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sisthm01;
import br.com.vti.sisp_sicrim.antigo.model.SicOperacao;
import br.com.vti.sisp_sicrim.antigo.model.Sislm001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Sissm002 OBJETIVO : MONTA JANELA DE OPCOES *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/sissm002")
public class Sissm002 {
	// Views utilizadas
	SicOperacao vwDveope = new SicOperacao();
	// Telas/relatorios utilizados
	Sissm002A sissm002A;
	Sisthm01 sisthm01;
	// Includes utilizados
	public Sislm001 sislm001 = new Sislm001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Sissm002 sissm002Anterior; // Par�metros
	public String mdfuo1 = "";
	public int z = 0;
	public String voltar = "";
	private String mdfuo2 = "";
	private int y = 0;
	private int c = 0;
	private String[] nomeClasse = new String[41];
	private String titulo = ""; // MONTA JANELA DE OPCOES

	private Sisthm01 preMapas() {
		sissm002A = new Sissm002A(true, sessao);
		sisthm01 = new Sisthm01(true, sessao);
		Arrays.fill(nomeClasse, "");
		return sisthm01;
	}

	public Sissm002(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Sisthm01 sisthm01, Sissm002A sissm002A) {
		try {
			main(sisthm01, sissm002A);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Sisthm01 psisthm01, Sissm002A psissm002A) {
		if (psisthm01 == null && psissm002A == null) {
			primeiraVez = true;
			// sisthm01 = new Sisthm01 (primeiraVez);
			sisthm01 = preMapas();
			sisthm01.setNavegar("../sissm002/executar");
			sissm002();
			sessao.setAtributo("SISSM002", this);
		} else {
			restaurarEstados(psissm002A, psisthm01);

			if (psisthm01 != null) {
				sisthm01.receberTela(primeiraVez, result);
				if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					funcoes.retornarModulo(result, sessao);
					return;
				}

				// Par�grafo: f1()
				for (sislm001.l = 1; sislm001.l <= 9; sislm001.l++) {
					for (c = 1; c <= 3; c++) {
						if (sisthm01.getOp0(c, sislm001.l).trim().equals(sisthm01.getOperacao())) {
							break;
						}
					}
				}

				if (!sisthm01.getOperacao().trim().equals("")) {
					funcoes.sissm001(result, sessao);
					return;
				}

				if (sisthm01.getOperacao().trim().equals("") && !UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					sisthm01.enviarMensagem("operacao", "Informe a opera��o!");
					sissm002();
					return;
				}

				if (sislm001.l > 9) {
					sisthm01.enviarMensagem("operacao", "");
					sissm002();
					return;
				}
				sessao.setAtributo("SISSM002", this);
				result.include("sisthm01", sisthm01);
				sisthm01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			} else {
				sissm002A.receberTela(false, result);
				if (!(sissm002A.getOperacao().equals("CAD") || sissm002A.getOperacao().equals("SIS") || sissm002A.getOperacao().equals("FIM")) && !UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					sessao.setAtributo("SISSM002", this);
					result.include("sissm002A", sissm002A);
					sissm002A.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
					return;
				}
			}
		}

	}

	private void sissm002() {
		c = 0;
		z = 1;
		mdfuo2 = mdfuo1;
		mdfuo2 = UtilBean.moveSubstring(mdfuo2, 0, 3, "A", "ZZZ");
		sislm001.l = 1;
		switch (UtilBean.subStr(mdfuo1, 2, 1)) {
		case "A": {
			sisthm01.setTitulo(" ATUALIZACOES ");
			break;
		}
		case "E": {
			sisthm01.setTitulo(" EMISSOES ");
			break;
		}
		case "C": {
			sisthm01.setTitulo(" CONSULTAS ");
			break;
		}
		case "F": {
			sisthm01.setTitulo(" FORMATACOES");
			break;
		}
		default: {
			break;
		}
		}

		if (UtilBean.subStr(mdfuo1, 2, 1).equals("S")) {
			sessao.setAtributo("SISSM002", this);
			result.include("sissm002A", sissm002A);
			sissm002A.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {

			while (vwDveope.leituraMdfuop()) {
				// READADA
				if (vwDveope.getModulo() == sessao.getSisgsisp().getVlt() && vwDveope.getFuncao().trim().equals(UtilBean.subStr(mdfuo1, 2, 1).trim())) {
					if (vwDveope.getModdis(sessao.getSisgsisp().getVlt() - 1) == sessao.getSisgsisp().getVlt()) {
						for (y = 1; y <= 40; y++) {
							if (nomeClasse[y].trim().equals(vwDveope.getPrograma().trim())) {
								break;
							}
						}
						if (y > 40) {
							for (y = 1; y <= 40; y++) {
								if (nomeClasse[y].trim().equals("")) {
									nomeClasse[y] = vwDveope.getPrograma();
									break;
								}
							}
							c += 1;
							if (c > 3) {
								c = 1;
								z += 1;
							}

							sisthm01.setOp0(c, z, vwDveope.getOperacao());
							sisthm01.setDe0(c, z, vwDveope.getDescricao());
						}

					}
				}
			}
			vwDveope.fecha();

			while (vwDveope.leituraMdfuop()) {
				if (vwDveope.getModulo() != sessao.getSisgsisp().getVlt() && vwDveope.getFuncao().trim().equals(UtilBean.subStr(mdfuo1, 2, 1).trim())) {
					if (vwDveope.getModdis(sessao.getSisgsisp().getVlt() - 1) == sessao.getSisgsisp().getVlt()) {
						for (y = 1; y <= 40; y++) {
							if (nomeClasse[y].trim().equals(vwDveope.getPrograma().trim())) {
								break;
							}
						}
						if (y > 40) {
							for (y = 1; y <= 40; y++) {
								if (nomeClasse[y].trim().equals("")) {
									nomeClasse[y] = vwDveope.getPrograma();
									break;
								}
							}
							c += 1;
							if (c > 3) {
								c = 1;
								z += 1;
							}
							sisthm01.setOp0(c, z, vwDveope.getOperacao());
							sisthm01.setDe0(c, z, vwDveope.getDescricao());
						}
					}
				}
			}
			vwDveope.fecha();

			result.include("sisthm01", sisthm01);
			sisthm01.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void restaurarEstados(Sissm002A psissm002A, Sisthm01 psisthm01) {
		this.sissm002Anterior = (Sissm002) sessao.getAtributo("SISSM002");
		if (psissm002A != null) {
			sissm002A = psissm002A;
		} else {
			sissm002A = this.sissm002Anterior.sissm002A;
		}
		sissm002A.setSessao(sessao);
		if (psisthm01 != null) {
			sisthm01 = psisthm01;
			sisthm01.setOp0(this.sissm002Anterior.sisthm01.getOp0());
			sisthm01.setDe0(this.sissm002Anterior.sisthm01.getDe0());
		} else {
			sisthm01 = this.sissm002Anterior.sisthm01;
		}
		sisthm01.setSessao(sessao);
		this.voltar = this.sissm002Anterior.voltar;
		this.sisthm01.setTitulo(this.sissm002Anterior.sisthm01.getTitulo());
	}
}
